package projet.volleystat.automate;

import java.text.SimpleDateFormat;
import java.util.Date;

import projet.volleystat.ActionManager;
import projet.volleystat.Player;
import projet.volleystat.Team;


/**
 * @author Lameira Nelaupe Ferrand Fiore
 * @version 1.0
 * Cette classe permet de passer d un etat a un autre durant un match.
 * Chaque action possible est representee par une sous classe.
 * Une methode vers String existe pour convertir les infos en chaine de caractere lisible par l entraineur.
 */
public abstract class VolleyAction {
	
	protected Team team;
	protected Player player;
	protected Date date;
	protected int faultId;
	protected short mark;

	/**
	 * @param team
	 * @param player
	 * Constructeur generique, les sous classes permettront de specifier.
	 */
	public VolleyAction(Team team, Player player){
		super();
		this.team = team;
		this.player = player;
		date = new Date();
		this.faultId = 0; // Represente aucune faute, les fautes seront repertori� par id plus tards
		this.mark = 0;
	}
	
	/**
	 * @param team
	 * @param player
	 * @param idFault
	 * Constructeur generique avec la faute idFaute, les sous classes permettront de specifier.
	 */
	public VolleyAction(Team team, Player player, int idFault){
		super();
		this.team = team;
		this.player = player;
		date = new Date();
		this.faultId = idFault;
		this.mark = 0;
	}
	
	/**
	 * @param team
	 * @param player
	 * @param idFault
	 * @param mark
	 * Constructeur generique avec l'idfaute et la note
	 */
	public VolleyAction(Team team, Player player, int idFault, short mark){
		super();
		this.team = team;
		this.player = player;
		date = new Date();
		this.faultId = idFault;
		this.mark = mark;
	}
	
	/**
	 * @return String
	 * Renvoi la date de l action sous forme xxhyymzzs (exemple : 16h45m24s).
	 */
	public String getTime(){
		SimpleDateFormat strTime = new SimpleDateFormat("HH'h'mm'm'ss's'");
		return strTime.format(date);
	}
	
	/**
	 * @return short
	 * Recupere la note de l'action.
	 * 0 : Non note
	 * 1: Mauvaise
	 * 2 : Moyenne
	 * 3 : Bonne
	 */
	public short getMark() {
		return mark;
	}

	/**
	 * @param mark
	 * Defini la note a mark	 
	 * 0 : Non note
	 * 1: Mauvaise
	 * 2 : Moyenne
	 * 3 : Bonne
	 */
	public void setMark(short mark) {
		this.mark = mark;
	}


	/**
	 * @return String
	 * Renvoi une representation textuelle de l action.
	 */
	public abstract String toString();
	
	// Getter and Setter

	/**
	 * @return team
	 * Recupere l equipe ayant fait l action.
	 */
	public Team getTeam() {
		return team;
	}

	/**
	 * @param team
	 * Defini l equipe ayant fait l action d equipe.
	 */
	public void setTeam(Team team) {
		this.team = team;
	}

	/**
	 * @return player
	 * Recupere le joueur ayant fait l action
	 */
	public Player getPlayer() {
		return player;
	}

	/**
	 * @param joueur
	 * Defini le joueur ayant fait l action a joueur.
	 */
	public void setPlayer(Player player) {
		this.player = player;
	}

	/**
	 * @return int
	 * Recupere l id de la faute pendant l action (0 si l action n'est pas une faute).
	 */
	public int getFaultId() {
		return faultId;
	}

	/**
	 * @param idFault
	 * Defini l id de la faute pendant l action a idFaute.
	 */
	public void setFaultId(int idFault) {
		this.faultId = idFault;
	}
	
	/**
	 * @return Date
	 * Recupere la date de l action.
	 */
	public Date getDate() {
		return date;
	}

	/**
	 * @param date
	 * Defini la date de l action a date.
	 */
	public void setDate(Date date) {
		this.date = date;
	}
	
	/**
	 * @return int
	 * Renvoie l id de l action.
	 * @see ActionManager
	 */
	public abstract int getId();
}
